<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpServiceMedias
{
	
	
	public static function getMedia()
	{
		
		global $core;		
		
		$media = $core->site->getMedias(array(
			'media_id'	=> $_POST['media_id'],
			'limit'		=> 1
		), CP_GET_RS);
		
		if($media->isEmpty()) {
			return array(
				'erreur' => 0,
				'media_id' => 0,
				'message' => __('Pas de média')
			);
		}
		
		return array(
			'erreur' => 0,
			'media_id'	=> $media->media_id,
			'media_fichier' => $media->media_fichier,
			'media_type' => $media->media_type,
			'media_titre' => $media->media_titre
		);
		
	}
	
	
	public static function getMedias()
	{
		
		global $core;
		
		# --- Filtres ---

		$params = array();

		$dossierObj = 0;
		$type = 'ignorer';
		
		# Ordonner les résultats
		$params['order'] = 'media_fichier ASC';
		
		# rechercher: Recherche de médias par mots-clés
		if(!empty($_POST['rechercher'])) {
			$params['rechercher'] = $_POST['rechercher'];
			$_POST['dossier'] = 'ignorer';
		}

		# type: Afficher les pages selon leur type
		if($_POST['type'] == 'image') {
			$params['media_type'] = array(
				'like' => array('image/%')
			);
			$type = 'image';
		} elseif($_POST['type'] == 'multimedia') {
			$params['media_type'] = array(
				'like' => array('audio/%', 'video/%'),
				'operateurLike' => 'OR',
				'=' => array('application/x-shockwave-flash'),
				'operateur' => 'OR'
			);
			$type = 'multimedia';
		} elseif($_POST['type'] == 'document') {
			$params['media_type'] = array(
				'like' => array('application/%'),
				'!=' => array('application/x-shockwave-flash'),
				'operateur' => 'AND'
			);
			$type = 'document';
		}

		# dossier: Afficher les médias d'un dossier en particulier
		if($_POST['dossier'] == 'ignorer') {
			$dossier = 'ignorer';
		}		
		else {
			if(empty($_POST['dossier']) || $_POST['dossier'] == '/') {
				$dossier = '/';
			} else {
				$dossier = path::clean('/'.$_POST['dossier']);
			}
			
			if(is_dir(CP_CHEMIN_MEDIAS.'/'.$dossier)) {			
				$dossierObj = $core->site->getDossierMedias($dossier, $params);
			}
			
		}
		
		
		# --- Requête DB ---
		
		if(is_array($dossierObj)) {
			$medias = $dossierObj['medias'];
			$dossiers = $dossierObj['dirs'];
			$arborescence = self::arborescence($dossierObj['media_dossier']);
		} else {
			$medias = $core->site->getMedias($params, CP_GET_STATIC);
			$dossiers = array();
			$arborescence = '';
		}
		
		return array(
			'erreur' => 0,
			'arborescence' => $arborescence,
			'medias' => self::mediasToXML($medias),
			'dossiers' => self::dossiersToXML($dossiers)
		);
		
	}
	
	
	protected static function arborescence($media_dossier)
	{
		$arborescence = explode('/', $media_dossier);
		
		$html = 		
			'<p class="arborescence">'.
				'<a href="#" name="/" '.($media_dossier == '/' ? 'class="current"' : '').'>'.
					__('Médias').
				'</a>';
		
		$lienDossier = '';
			
		foreach($arborescence as $v)
		{	
			if($v != '')
			{
				$lienDossier.='/'.$v;

				$html.=
					'<a href="#" name="'.$lienDossier.'" '.($lienDossier == $media_dossier ? 'class="current"' : '').'>'.
						html::escapeHTML($v).
					'</a>';
			}
		}
		
		$html.=
			'</p>';
				
		return $html;
		
	}
	
	
	protected static function mediasToXML($medias)
	{
		
		$return = array();
		
		while($medias->fetch())
		{
			$return[] = array(
				'media_id' => $medias->media_id,
				'media_dossier' => $medias->media_dossier,
				'media_fichier' => $medias->media_fichier,
				'url' => $medias->publicURL(),
				'media_titre' => $medias->media_titre,
				'media_type' => $medias->media_type,
				'icone' => $medias->icone()
			);
		}
		
		return $return;
		
	}
	
	
	protected static function dossiersToXML($dossiers)
	{
		$return = array();
		
		foreach($dossiers as $dossier)
		{
			$return[] = array(
				'nom' => $dossier->basename,
				'path' => $path = '/'.$dossier->relname
			);
		}
		
		return $return;
	}
	
	
	public static function supprimer()
	{
		
		global $core;
		
		# Permission nécessaire: medias
		$core->auth->verifierPermission('medias', true);
		
		if(is_array($_POST['dossiersMedias']))
		{
			
			# Permission nécessaire: supprimerMedia
			$core->auth->verifierPermission('supprimerMedia', true);
			
			foreach($_POST['dossiersMedias'] as $relname)
			{

				$f = path::real(CP_CHEMIN_MEDIAS.$relname);
				
				# Vérifier si le dossier à supprimer existe, et s'il est bien un sous-dossier de "medias"!
				if(	$f !== false && is_dir($f) &&
					preg_match('|^'.preg_quote(CP_CHEMIN_MEDIAS,'|').'|',$f)
				) {
					
					# Obtenir la liste de tous les médias inclus
					$medias = $core->site->getMedias(array(
						'media_dossier' => array('like' => array($relname.'%'))
					), CP_GET_STATIC);
					
					# Supprimer tous les médias inclus
					while($medias->fetch()) {
						$medias->supprimer();	
					}
					
					# Suppression des sous-dossiers
					files::deltree($f);
					
				}
			}
	
		}
		
		if(is_array($_POST['medias']))
		{
			
			$medias = $core->site->getMedias(array(
				'media_id' => array('=' => $_POST['medias'])
			), CP_GET_STATIC);
			
			while($medias->fetch())
			{
				if($medias->utilisateur_id != $core->auth->getUtilisateurID()) {
					# Permission nécessaire: supprimerMedia
					$core->auth->verifierPermission('supprimerMedia', true);
				}
					
				$medias->supprimer();
				
			}
			
		}

	}
	
	
	public static function deplacer()
	{
		
		global $core;
		
		# Permission nécessaire: medias
		$core->auth->verifierPermission('medias', true);
		
		$dest = $dest2 = path::clean($_POST['deplacer_dossier']);
		$dest = empty($dest) ? '/' : $dest;
		
		if(is_array($_POST['dossiersMedias']))
		{
			
			# Permission nécessaire: tousMedias
			$core->auth->verifierPermission('tousMedias', true);

			$filemanager = new filemanager(CP_CHEMIN_MEDIAS);
			
			foreach($_POST['dossiersMedias'] as $relname)
			{
				$basename = basename($relname);
				
				if(preg_match('%^'.$relname.'%', $dest)) {
					throw new cpErreur(sprintf(__('Vous ne pouvez pas déplacer le dossier %s à l\'intérieur de lui-même.'), '<em>'.html::escapeHTML($basename).'</em>'), 'dossiersMedia', 303);
				}
				
				$filemanager->moveFile($relname, $dest2.'/'.$basename);
				$medias = $core->site->getMedias(array('media_dossier' => array('like' => $relname.'%')), CP_GET_RS);
				$cur = $core->con->openCursor($core->prefix.'medias');
				while($medias->fetch())
				{
					$cur->media_dossier = preg_replace('%^'.$relname.'%',$dest2.'/'.$basename,$medias->media_dossier);
					$cur->update('WHERE media_id = '.$medias->media_id.' LIMIT 1');
				}
			}
		
		}
			
		if(is_array($_POST['medias']))
		{
			
			$medias = $core->site->getMedias(array(
				'media_id' => array('=' => $_POST['medias'])
			), CP_GET_STATIC);
			
			$cur = $core->con->openCursor($core->prefix.'medias');
			$cur->media_dossier = $dest;
			
			while($medias->fetch())
			{
				
				if($medias->utilisateur_id != $core->auth->getUtilisateurID()) {
					# Permission nécessaire: tousMedias
					$core->auth->verifierPermission('tousMedias', true);
				}
				
				$medias->enregistrer($cur);
			}
			
		}

	}
	
	
	public static function getComboDossiers()
	{
		
		global $core;
		
		return array(
			'erreur' => 0,
			'combo' => form::combo($_POST['combo_nom'], $core->site->getComboDossiersMedias())
		);
		
	}
	
	
}

?>